# 初始化众数和众数的重数
mode = 0
sum_mode = 0


# 设定一个数组的左边界为l右边界为r

# 统计中位数重数
def sum_Median(List, l, r):
    median = List[(l + r) // 2]
    counts = 0
    for i in range(r + 1):  # 这里要遍历整个数组数组
        if List[i] == median:
            counts += 1

    return counts


# 找中位数第一次出现的位置
def start(List, l, r):
    m = (l + r) // 2
    for i in range(l, r):  # 只需要在这个部分数组中寻找
        if List[i] == List[m]:
            return i
    return 0  # 当l等于r时返回left为0，不然函数会默认返回none导致报错


def find(List, l, r):
    # 声明一下全局变量
    global sum_mode
    global mode

    m = (l + r) // 2
    # 计算当前中位数的重数
    s_M = sum_Median(List, l, r)
    # 记录中位数第一次出现的位置，也就是左边界
    left = start(List, l, r)

    # 如果当前中位数的重数大于众数的重数，就代替众数
    if s_M > sum_mode:
        sum_mode = s_M
        mode = List[m]
    # 如果右边空余位置大于当前众数的重数，往右边递归
    if (r + 1 - (left + s_M)) > sum_mode:
        find(List, left + s_M, r)

    # 如果左边空余位置大于当前众数的重数，望左边递归
    if left > sum_mode:
        find(List, l, left)


List1 = input("输入数据：").split()  # 输入一串数字

List1 = [int(i) for i in List1[0]]  # 将输入的数字转为列表
List1.sort()  # 排序
# 初始化数组左右边界
L = 0

R = len(List1) - 1
find(List1, L, R)
print("众数为:", mode, "众数的重数为:", sum_mode)
